package com.waitingresult.io;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class IoDesc {
    /**

     *
     * 按照数据类型来分
     *      字符流
     *      字节流
     *   如何按照数据类型来选择IO流?
     *      我们能够读懂的数据, 就是用字符流,反之 用字节流.


     * IO 流的概述
     * IO(Input 输入流,Output 输出流)
     * 流: 是一种抽象概念,是对数据传输的总称,也就是说数据在设备之间的传输 称之为流,流的本质, 是数据传输
     * IO流就是用来处理设备之间的数据传输问题的 常见的有: 文件复制, 文件上传, 文件下载
     */
    // IO流 章节学习
    //File 类
    public static void main(String[] args) throws Exception{
        //
        /*File file = new File("D:\\");
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }*/

        // 创建一个文件地址, 写入数据
       //output();

        // 读出一个数据
     //   read1();
        read2();

    }
    private static void read2() throws IOException {
        //构建这个文件的 读取对象
        FileInputStream file = new FileInputStream("D:\\1.txt");
        //初始化一个字节数组
        byte[] bytes = new byte[1024];
        //一次性读取 一个字节数组的数据,返回的是这个文件总共占用多少个字节
        //读入缓冲区的总字节数，如果由于已到达文件末尾而没有更多数据，则为-1
        int read = file.read(bytes);
        // bytes – 要解码为字符的字节
        // offset – 要解码的第一个字节的索引
        // 长度 - 要解码的字节数
        //如果字节大于1024 就要翻倍, 采用循环的方式 去读取数据
        System.out.println(new String(bytes,0,read));
    }
    private static void read1() throws IOException {
        FileInputStream file = new FileInputStream("D:\\1.txt");
        int read = file.read();
        StringBuilder stringBuilder = new StringBuilder();
        while(read != -1){
           stringBuilder.append((char) read);

           // System.out.println((char) read);
            read = file.read();
        }
        System.out.println(stringBuilder);
    }

    private static void output() throws IOException {
        // 创建一个新的文件
       // FileOutputStream fileo = new FileOutputStream("D:\\1.txt");
        // 创建一个文件, 如果之前 这个文件存在, 就写入
        FileOutputStream fileo = new FileOutputStream("D:\\1.txt",true);
        //把字符串转换成字节, 编码格式为UTF-8
        byte[] bytes = "小王好好学习".getBytes(StandardCharsets.UTF_8);
        //写入数据
        fileo.write(bytes);
    }
}
